// 导入Todo实体
import { Todo } from '../db/entity/todo.entity.js';
import { User } from '../db/entity/user.entity.js';
/**
 * 创建一个新的Todo项
 * @param todo 包含title、description和completed的Todo对象
 * @returns 创建成功的Todo项
 */
export async function createTodo(todo: { title: string; description?: string; completed?: boolean, user: User }) {
  let { user, ...res } = await Todo.createTodo(todo);
  return res;
}

/**
 * 根据ID获取一个Todo项
 * @param id Todo项的ID
 * @returns 找到的Todo项，如果未找到则返回undefined
 */
export async function getTodoById(id: number) {
  let todo= await Todo.getTodoById(id);
  if (!todo) {
    throw new Error('Todo项不存在');
  }
  delete todo.user.password;
  delete todo.user.token;
  return todo;
}

/**
 * 更新一个Todo项
 * @param id Todo项的ID
 * @param todo 包含要更新的字段的Todo对象
 * @returns 更新后的Todo项
 */
export async function updateTodo(id: number, user_id: number, todo: { title: string; description: string; completed: boolean }) {
  let todoItem = await Todo.getTodoById(id);
  if (!todoItem) {
    throw new Error('Todo项不存在');
  }
  if (todoItem.user.id !== user_id) {
    throw new Error('您没有权限修改该Todo项')
  }
  return await Todo.updateTodo(id, todo);
}

/**
 * 根据ID删除一个Todo项
 * @param id Todo项的ID
 * @returns 删除操作的结果
 */
export async function deleteTodo(id: number,user_id: number,) {
  let todoItem = await Todo.getTodoById(id);
  if (!todoItem) {
    throw new Error('Todo项不存在');
  }
  if (todoItem.user.id !== user_id) {
    throw new Error('您没有权限修改该Todo项')
  }
  return await Todo.deleteTodo(id);
}

/**
 * 分页查询Todo项
 * @param page 页码，从1开始，默认值为1
 * @param limit 每页数量，默认值为10
 * @param title 标题关键字，用于筛选标题包含该关键字的Todo项
 * @param completed 完成状态，用于筛选已完成或未完成的Todo项
 * @returns 包含当前页数据、总记录数、当前页码、每页大小和总页数的对象
 */
export async function paginateTodos(uid=0,page: number = 1, limit: number = 10, title?: string, completed?: boolean | undefined) {
  return await Todo.paginateTodos2(uid,page, limit, title, completed);
}
